package com.taotao.portal.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.po.TbItem;
import com.taotao.pojo.TaotaoResult;
import com.taotao.portal.pojo.CartItem;
import com.taotao.portal.service.CartService;
import com.taotao.portal.service.ItemDetailService;
import com.taotao.util.CookieUtils;
import com.taotao.util.JsonUtils;

@Service
public class CartServiceImpl implements CartService {

	@Autowired
	private ItemDetailService itemDetailService;
	
	@Value("${COOKIE_EXPIRE}")
	private Integer COOKIE_EXPIRE;
	
	@Override
	public TaotaoResult addCartItem(Long itemId, Integer num,
			HttpServletRequest request, HttpServletResponse response) {
		// 接收商品的ID
		// 从cookie中查询购物车列表
		// 3、从商品列表中查询列表是否存在此商品
		boolean haveFlg = false;

		List<CartItem> itemList = getItemList(request);
		for (CartItem cartItem : itemList) {
			// 如果商品存在数量相加
			// 4、如果存在商品的数量加上参数中的商品数量
			// 包装类比较大小 longValue()只需要写一个就行 另一个会自动转换的
			if (cartItem.getId().longValue() == itemId) {
				cartItem.setNum(cartItem.getNum() + num);
				haveFlg = true;
				break;
			}
		}
		// 5、如果不存在，调用rest服务，根据商品id获得商品数据。
		if (!haveFlg) {
			TbItem item = itemDetailService.getItemInfoById(itemId);
			// 转换成CartItem
			CartItem cartItem = new CartItem();
			cartItem.setId(itemId);
			cartItem.setNum(num);
			cartItem.setPrice(item.getPrice());
			cartItem.setTitle(item.getTitle());
			if (StringUtils.isNotBlank(item.getImage())) {
				String image = item.getImage();
				String[] strings = image.split(",");
				cartItem.setImage(strings[0]);
			}
			// 添加到购物车商品列表
			// 6、把商品数据添加到列表中
			itemList.add(cartItem);
		}
		// 7、把购物车商品列表写入cookie 不设置cookie的过期时间默认是关闭浏览器就失效
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(itemList), COOKIE_EXPIRE, true);
		// 8、返回TaotaoResult
		return TaotaoResult.ok();

	}

	// 取购物车列表
	@Override
	public List<CartItem> getItemList(HttpServletRequest request) {
		// 从cookie中取商品列表
		String json = CookieUtils.getCookieValue(request, "TT_CART", true);
		// 把json转换为java对象
		List<CartItem> list = JsonUtils.jsonToList(json, CartItem.class);
		return list == null ? new ArrayList<CartItem>() : list;
	}

	// 返回购物车列表
	@Override
	public List<CartItem> getCartItemList(HttpServletRequest request) {
		// 从cookie中取值
		List<CartItem> itemList = getItemList(request);
		
		return itemList;
	}

	@Override
	public TaotaoResult updateCartItemNum(Long itemId,Integer num,HttpServletRequest request,HttpServletResponse response) {
		List<CartItem> list = getItemList(request);
		for (CartItem cartItem : list) {			
			if (cartItem.getId().longValue()==itemId) {
				cartItem.setNum(num);
				break;
			}
		}
		// 更新cookie值      并且更新cookie的过期时间
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list),COOKIE_EXPIRE,true);
		return TaotaoResult.ok();
	}

	@Override
	public TaotaoResult deleteCartItem(Long itemId, HttpServletRequest request,
			HttpServletResponse response) {
		List<CartItem> list = getItemList(request);
		for (CartItem cartItem : list) {
			// 如果找到了itemId 就删除该对象
			if (cartItem.getId().longValue()==itemId) {
				list.remove(cartItem);
				break;
			}
		}
		// 写入cookie
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list),COOKIE_EXPIRE,true);
		return TaotaoResult.ok();
	}

}
